package com.xinqi.modules.databank.v2.service.video;

import com.xinqi.common.core.enums.StudentSwitchType;
import com.xinqi.modules.databank.dto.req.*;
import com.xinqi.modules.databank.dto.rsp.ResourceResponseDTO;
import com.xinqi.modules.databank.dto.rsp.ResourceStatisticsDTO;
import com.xinqi.modules.databank.dto.rsp.ResourceStatisticsStatsDTO;
import com.xinqi.modules.databank.v2.domain.CourseResourceEntity;

import java.util.List;

/**
 * 资料库-互动视频-方法
 * @author dzy
 */
public interface CourseResourceVideoService {

    /**
     * 新增 互动视频
     * @param resource 资料添加对象
     */
    void addResource(CourseResourceVideoCreateDTO resource);

    /**
     * 修改 互动视频
     * @param resource 资料实体
     */
    void updateResource(CourseResourceVideoUpdateDTO resource);

    /**
     * 一键发布 互动视频 信息
     * @param id 资料ID
     * @author dzy
     */
    Boolean releaseResource(Long id);

    /**
     * 一键发布 互动视频 信息 V2版本
     * @param id 资料ID
     * @author dzy
     */
    Boolean releaseResourceV2(Long id);

    /**
     * 定时发布 互动视频 信息
     * @param entity 互动视频实体
     * @author dzy
     */
    Boolean timingPublish(CourseResourceEntity entity);

    /**
     * 同步对应的互动视频数据
     */
    void syncResourceInfo(CourseResourceEntity entity);


    /**
     * 下载互动视频文件
     * @param downloadDto 下载资料实体
     * @return Boolean
     * @author dzy
     */
    List<String> downResource(DownloadDTO downloadDto);

    /**
     * 获取互动视频详情
     * @param contentId 资料ID
     * @return ResourceResponseDTO 返回详情对象
     * @author dzy
     */
    ResourceResponseDTO getResourceInfo(Long contentId);

    /**
     * 更新互动视频学习进度
     * @param dto 资料ID
     * @author dzy
     */
    void refreshStudyStatus(CourseResourceVideoRefreshDTO dto);

    /**
     * 查询互动视频统计信息
     * @param resourceQueryDTO 课程ID
     * @return List<ResourceStatisticsDTO> 集合
     * @author dzy
     */
    List<ResourceStatisticsDTO> resourceStatistics(ResourceQueryDTO resourceQueryDTO);

    /**
     * 查询互动视频统计信息-带统计数据
     * @param resourceQueryDTO 课程ID
     * @return List<ResourceStatisticsDTO> 集合
     * @author dzy
     */
    ResourceStatisticsStatsDTO resourceStatisticsAll(ResourceQueryDTO resourceQueryDTO);

    /**
     * 学生加入班级操作
     * @param courseId 课程ID
     * @param classId 班级ID
     * @param studentId 学生ID
     * @param switchType 身份变化
     */
    void studentJoinClass(Long courseId, Long classId, Long studentId, StudentSwitchType switchType);


}
